

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Myelcipse_KEY extends JFrame {

 public Myelcipse_KEY() {


  JLabel label = new JLabel("注册名：");
  JLabel label2 = new JLabel("注册码：");
  JLabel label3 = new JLabel("            使用方法：输入任意注册名，点击确定，复制注册码进入MyEclipse6.5Blue");
  JLabel label4 = new JLabel("                         点击MyEclipse菜单->Subscription Information");
  JButton button = new JButton("确定");
  button.setMnemonic(KeyEvent.VK_I);
  final JTextField textField = new JTextField(25);
  final JTextField textField2 = new JTextField(25);
  JPanel panel = new JPanel();
  panel.setBorder(BorderFactory.createEmptyBorder(30, 50, 10, 100));
  // 添加事件处理
  button.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent arg0) {
    String id = "";
    String num = "999";// 许可证数量
    id = textField.getText();
    textField2.setText(getSerial(id, "100", num, true));
   }

  });
  panel.add(label);
  panel.add(textField);
  panel.add(label2);
  panel.add(textField2);
  panel.add(button);
  panel.add(label3);
  panel.add(label4);
  this.getContentPane().add(panel);

  // 设置窗体属性

  // this.pack();
  setSize(500, 200);
  setTitle("MyEclipse6.5注册机(mgx)");
  setLocationRelativeTo(null);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
  // this.show();
 }

 public static void main(String[] args) {
   Myelcipse_KEY mainWindow = new Myelcipse_KEY();
 }

 public static String getSerial(String userId, String version,
   String licenseNum, boolean selected) {
  Calendar cal = Calendar.getInstance(); 
        cal.add(1, 3); 
        cal.add(6, -1); 
        NumberFormat nf = new DecimalFormat("000"); 
        licenseNum = nf.format(Integer.valueOf(licenseNum)); 
        String verTime = selected ? (new StringBuffer("-")).append( 
                (new SimpleDateFormat("yyMMdd")).format(cal.getTime())).append( 
                "0").toString() : "-0912310"; 
        String type = "YE3MB-"; 
        String need = (new StringBuffer(String.valueOf(userId.substring(0, 1)))) 
                .append(type).append(version).append(licenseNum) 
                .append(verTime).toString(); 
        String dx = (new StringBuffer(String.valueOf(need))) 
                .append( 
                        "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.") 
                 
                        .append(userId).toString(); 
        int suf = decode(dx); 
        String code = (new StringBuffer(String.valueOf(need))).append( 
                String.valueOf(suf)).toString(); 
        return change(code); 
 }

 private static int decode(String s) {
        int i = 0; 
         char ac[] = s.toCharArray(); 
         int j = 0; 
         for (int k = ac.length; j < k; j++) 
             i = 31 * i + ac[j]; 
 
         return Math.abs(i); 
 }

 private static String change(String s) {
        byte abyte0[] = s.getBytes(); 
        char ac[] = new char[s.length()]; 
        int i = 0; 
        for (int k = abyte0.length; i < k; i++) { 
            int j = abyte0[i]; 
            if (j >= 48 && j <= 57) 
                j = ((j - 48) + 5) % 10 + 48; 
            else if (j >= 65 && j <= 90) 
                j = ((j - 65) + 13) % 26 + 65; 
            else if (j >= 97 && j <= 122) 
                j = ((j - 97) + 13) % 26 + 97; 
            ac[i] = (char) j; 
        } 
 
        return String.valueOf(ac); 
    } 
}